package com.itheima.d1_collection_set;

import com.itheima.d1_collection_set.bean.Student;

import java.util.HashSet;

/**
 * 目标：自定义的类型的对象，比如两个内容一样的学生对象，如果让HashSet集合能够去重复！
 *
 *
 * 当集合的底层时哈希表结构，要想让存储的自定义类型能够去重，就得对类型进行重写hashCode和equals方法
 */
public class SetTest3 {
    public static void main(String[] args) {
        HashSet<Student> students = new HashSet<>();

        students.add(new Student("张三",18,165));
        students.add(new Student("张三",18,165));
        /*没有重写hasCode方法和equals方法之前
        [Student{name='张三', age=18, height=165.0}, Student{name='张三', age=18, height=165.0}]
        new了两个对象。每个对象的hasCode接近于两个地址，hash值不同。进一步对数组长度取余得到的位置也不相同，两个都会存储。
        即便是不同的哈希值，取余运算得到的是相同的位置，也会进一步比较equals，此时没有重写equals方法，默认比较的是真实的地址值

        解决办法只需要在javabean中重写hashCode和equals方法，重写之后哈希值不在跟地址有关，只和内容有关
        */
        students.forEach(System.out::println);
    }
}
